const usersModel = require("../model/users_model");
const Result = require("../beans/result");
class UsersController {
  constructor() {}
  async findById(req, res, next) {
    try {
      const { id } = req.params;
      const result = await usersModel.findById(id);
      res.json(Result.ok("success", result));
    } catch (err) {
      res.json(Result.error(err));
    }
  }
  /*
    async  await 调用返回 Promise对象 的方法 用 try {} catch(err){}
    得到正确的值 和  错误信息   这样链接错误和操作错误都在catch 里面返回到前端
    得到的值就是返回的值，我们只需要根据这个返回的值做判断是否是理论上的成功或失败
  */
  async login(req, res, next) {
    try {
      const body = req.body;
      const result = await usersModel.login(body);
      if (!result.length) {
        res.json(Result.fail("登录失败,用户名或密码错误", result));
        return;
      }
      res.json(Result.ok("登录成功", result));
    } catch (err) {
      res.json(Result.error(err));
    }
  }
  async login1(req, res, next) {
    try {
      const body = req.body;
      const result = await usersModel.login1(body);
      if (!result.length) {
        res.json(Result.fail("登录失败,用户名或密码错误", result));
        return;
      }
      res.json(Result.ok("登录成功", result));
    } catch (err) {
      res.json(Result.error(err));
    }
  }
  async register(req, res, next) {
    try {
      const body = req.body;
      const ret = await usersModel.findByUsername(body.username);
      if (!ret.length) {
        //根据用户名查询数据没有数据则注册
        const result = await usersModel.register(body);
        // { acknowledged: true, insertedId: ObjectId("616aa947d1a35b74c230b5af") }
        //只要返回的结果中 insertedId 不等于 0  就是注册成功 //没什么问题一般都是会成功
        !result.insertedId
          ? res.json(Result.fail("注册失败", result))
          : res.json(Result.ok("注册成功", result));
      } else {
        //有数据提示已经存在
        res.json(Result.fail("用户名已经存在")); //这里值返回提示msg 不用返回data数据
      }
    } catch (err) {
      res.json(Result.error(err));
    }
  }

  async updateById(req, res, next) {
    try {
      const id = req.params.id;
      const body = req.body;
      const result = await usersModel.updateById(id, body);
      // {"acknowledged":true,"insertedId":null,"matchedCount":0,"modifiedCount":0,"upsertedCount":0} //失败(一般就是根据你的条件找不到这条数据去修改就会失败)
      //{"acknowledged":true,"insertedId":null,"matchedCount":1,"modifiedCount":1,"upsertedCount":0} //匹配到一条，受影响行数一条
      //{"acknowledged":true,"insertedId":null,"matchedCount":1,"modifiedCount":0,"upsertedCount":0} //匹配到一条，受影响行数零条(把存在用户名admin修改成admin,这种情况就会出现找到这条数据，但是结果没受影响)
      //只要返回的结果中 modifiedCount 不等于 0  就是修改成功
      !result.modifiedCount
        ? res.json(Result.fail("修改失败", result))
        : res.json(Result.ok("修改成功", result));
    } catch (err) {
      res.json(Result.error(err));
    }
  }

  async deleteById(req, res, next) {
    try {
      const id = req.params.id;
      const result = await usersModel.deleteById(id);
      // { acknowledged: true, deletedCount: 1 }
      //只要返回的结果中 deletedCount 不等于 0  就是删除成功
      !result.deletedCount
        ? res.json(Result.fail("删除失败", result))
        : res.json(Result.ok("删除成功", result));
    } catch (err) {
      res.json(Result.error(err));
    }
  }
}
module.exports = new UsersController();
